package chapter6;
import java.util.Scanner;

/****************************************************************
 * Author：icynlau
 * Description: 反素数  ——一个非回文素数，反转之后也是一个素数
- * Date:2021/4/6
 * ***************************************************************
 */
public class exc6_27 {
	
	public static boolean isPrime(int n) {
		//是否素数
		boolean ret=true;
		if(n<=10) {  //看题目要求，不允许有小于十的这种反素数
			return false;
		}
		for(int i=2;i<=n/2;i++) {
			if(n%i==0) {
				return false;
				//这里有个比较值得注意的地方，
				//如果我这一步只是将ret赋值为true，不及时返回的话
				//会继续浪费很多时间进行没有意义的循环
			}
		}
		
		return ret;
	}
	
	//字符串反转
	//SringBuffer类和String一样，也用来代表字符串，相比String, StringBuffer在进行字符串处理时，不生成新的对象，在内存使用上要优于String类。
	//当遇到插入、删除等字符串操作时，可以考虑用StringBuffer。
	
	public static int  reverse(int n) {
		
		String s=Integer.toString(n);
//		System.out.print("\n"+n+" to "+ Integer.parseInt(   new StringBuffer(s).reverse().toString()  )+"\n");
		return Integer.parseInt(   new StringBuffer(s).reverse().toString()  );
		
	}
	
	public static boolean isPalindrome(int n) {
		//是否是回文数
		boolean ret=true;
		
		String s=Integer.toString(n);
		int index1=0;
		int index2=s.length()-1;
		if(s.length()!=1) {
			while(index1==(s.length()-index2-1) && index1<=index2) {
				if(s.charAt(index1) != s.charAt(index2)) {
					ret=false;
				}
				index1++;
				index2--;
			}
		}
		
		/*//下面这样用for循环也可，不用进行s长度是否为1的判断了
		for(int i=0;i<s.length()-1;i++) {
			if(s.charAt(i)!=s.charAt(s.length()-1-i)) {
				ret=false;
			}
		}
		*/
		
		return ret;
	}
	
	
	public static void main(String[] args) {
		
		int sum=0;	//当前回文素数个数
		int n=2;	//检测数
		int base=0;		//控制换行
		String sNumber=Integer.toString(n);
		while(sum<100) {
			
			if(isPrime(n) &&isPrime(reverse(n))&&!isPalindrome(n)) {
				System.out.printf(" %8d",n);
				sum++;
				if(sum%10==0&&sum!=base) {
					base+=10;
					System.out.print("\n");
				}
			}
			
			n++;
			
		}//end of while
		
	}
	
}

